using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._DefenseTools._DistanceandDirection
{
    /// <summary>
    /// <para>Generate Range Fans From Features</para>
    /// <para>Creates range fans with attributes derived from fields in a point feature class or shapefile.</para>
    /// <para>使用派生自点要素类或 shapefile 中的字段的属性创建范围扇形。</para>
    /// </summary>    
    [DisplayName("Generate Range Fans From Features")]
    public class GenerateRangeFansFromFeatures : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public GenerateRangeFansFromFeatures()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_features">
        /// <para>Input Features</para>
        /// <para>The point feature set that identifies the origin points of the range fans. The input must have at least one point.</para>
        /// <para>用于标识范围风扇原点的点要素集。输入必须至少有一个点。</para>
        /// </param>
        /// <param name="_output_feature_class">
        /// <para>Output Range Fan Feature Class</para>
        /// <para>The feature class that will contain the output range fan features.</para>
        /// <para>将包含输出范围风扇要素的要素类。</para>
        /// </param>
        /// <param name="_inner_radius_field">
        /// <para>Minimum Distance Field</para>
        /// <para>The field that contains the values for the distance from the origin point to the start of the range fan.</para>
        /// <para>包含从原点到范围风扇起点的距离值的字段。</para>
        /// </param>
        /// <param name="_outer_radius_field">
        /// <para>Maximum Distance Field</para>
        /// <para>The field that contains the values for the distance from the origin point to the end of the range fan.</para>
        /// <para>包含从原点到范围扇末端的距离值的字段。</para>
        /// </param>
        /// <param name="_start_angle_field">
        /// <para>Horizontal Start Angle Field</para>
        /// <para>The field that contains the values for the angle from the origin point to the start of the range fan.</para>
        /// <para>包含从原点到范围扇起点的角度值的字段。</para>
        /// </param>
        /// <param name="_end_angle_field">
        /// <para>Horizontal End Angle Field</para>
        /// <para>The field that contains the values for the angle from the origin point to the end of the range fan.</para>
        /// <para>包含从原点到范围扇末端的角度值的字段。</para>
        /// </param>
        public GenerateRangeFansFromFeatures(object _in_features, object _output_feature_class, object _inner_radius_field, object _outer_radius_field, object _start_angle_field, object _end_angle_field)
        {
            this._in_features = _in_features;
            this._output_feature_class = _output_feature_class;
            this._inner_radius_field = _inner_radius_field;
            this._outer_radius_field = _outer_radius_field;
            this._start_angle_field = _start_angle_field;
            this._end_angle_field = _end_angle_field;
        }
        public override string ToolboxName => "Defense Tools";

        public override string ToolName => "Generate Range Fans From Features";

        public override string CallName => "defense.GenerateRangeFansFromFeatures";

        public override List<string> AcceptEnvironments => ["outputCoordinateSystem", "scratchWorkspace", "workspace"];

        public override object[] ParameterInfo => [_in_features, _output_feature_class, _inner_radius_field, _outer_radius_field, _start_angle_field, _end_angle_field, _distance_units.GetGPValue(), _angle_units.GetGPValue()];

        /// <summary>
        /// <para>Input Features</para>
        /// <para>The point feature set that identifies the origin points of the range fans. The input must have at least one point.</para>
        /// <para>用于标识范围风扇原点的点要素集。输入必须至少有一个点。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_features { get; set; }


        /// <summary>
        /// <para>Output Range Fan Feature Class</para>
        /// <para>The feature class that will contain the output range fan features.</para>
        /// <para>将包含输出范围风扇要素的要素类。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Range Fan Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _output_feature_class { get; set; }


        /// <summary>
        /// <para>Minimum Distance Field</para>
        /// <para>The field that contains the values for the distance from the origin point to the start of the range fan.</para>
        /// <para>包含从原点到范围风扇起点的距离值的字段。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Minimum Distance Field")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _inner_radius_field { get; set; }


        /// <summary>
        /// <para>Maximum Distance Field</para>
        /// <para>The field that contains the values for the distance from the origin point to the end of the range fan.</para>
        /// <para>包含从原点到范围扇末端的距离值的字段。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Maximum Distance Field")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _outer_radius_field { get; set; }


        /// <summary>
        /// <para>Horizontal Start Angle Field</para>
        /// <para>The field that contains the values for the angle from the origin point to the start of the range fan.</para>
        /// <para>包含从原点到范围扇起点的角度值的字段。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Horizontal Start Angle Field")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _start_angle_field { get; set; }


        /// <summary>
        /// <para>Horizontal End Angle Field</para>
        /// <para>The field that contains the values for the angle from the origin point to the end of the range fan.</para>
        /// <para>包含从原点到范围扇末端的角度值的字段。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Horizontal End Angle Field")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _end_angle_field { get; set; }


        /// <summary>
        /// <para>Distance Units</para>
        /// <para><xdoc>
        ///   <para>Specifies the linear unit of measure for minimum and maximum distance.</para>
        ///   <bulletList>
        ///     <bullet_item>Meters—The unit will be meters. This is the default.</bullet_item><para/>
        ///     <bullet_item>Kilometers—The unit will be kilometers.</bullet_item><para/>
        ///     <bullet_item>Miles—The unit will be miles.</bullet_item><para/>
        ///     <bullet_item>Nautical miles—The unit will be nautical miles.</bullet_item><para/>
        ///     <bullet_item>Feet—The unit will be feet.</bullet_item><para/>
        ///     <bullet_item>US survey feet—The unit will be U.S. survey feet.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定最小距离和最大距离的线性测量单位。</para>
        ///   <bulletList>
        ///     <bullet_item>米—单位将为米。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>千米—单位将为千米。</bullet_item><para/>
        ///     <bullet_item>英里—单位将为英里。</bullet_item><para/>
        ///     <bullet_item>海里—单位将为海里。</bullet_item><para/>
        ///     <bullet_item>英尺—单位将为英尺。</bullet_item><para/>
        ///     <bullet_item>美国测量英尺—单位为美国测量英尺。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Distance Units")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _distance_units_value _distance_units { get; set; } = _distance_units_value._METERS;

        public enum _distance_units_value
        {
            /// <summary>
            /// <para>Meters</para>
            /// <para>Meters—The unit will be meters. This is the default.</para>
            /// <para>米—单位将为米。这是默认设置。</para>
            /// </summary>
            [Description("Meters")]
            [GPEnumValue("METERS")]
            _METERS,

            /// <summary>
            /// <para>Kilometers</para>
            /// <para>Kilometers—The unit will be kilometers.</para>
            /// <para>千米—单位将为千米。</para>
            /// </summary>
            [Description("Kilometers")]
            [GPEnumValue("KILOMETERS")]
            _KILOMETERS,

            /// <summary>
            /// <para>Miles</para>
            /// <para>Miles—The unit will be miles.</para>
            /// <para>英里—单位将为英里。</para>
            /// </summary>
            [Description("Miles")]
            [GPEnumValue("MILES")]
            _MILES,

            /// <summary>
            /// <para>Nautical miles</para>
            /// <para>Nautical miles—The unit will be nautical miles.</para>
            /// <para>海里—单位将为海里。</para>
            /// </summary>
            [Description("Nautical miles")]
            [GPEnumValue("NAUTICAL_MILES")]
            _NAUTICAL_MILES,

            /// <summary>
            /// <para>Feet</para>
            /// <para>Feet—The unit will be feet.</para>
            /// <para>英尺—单位将为英尺。</para>
            /// </summary>
            [Description("Feet")]
            [GPEnumValue("FEET")]
            _FEET,

            /// <summary>
            /// <para>US survey feet</para>
            /// <para>US survey feet—The unit will be U.S. survey feet.</para>
            /// <para>美国测量英尺—单位为美国测量英尺。</para>
            /// </summary>
            [Description("US survey feet")]
            [GPEnumValue("US_SURVEY_FEET")]
            _US_SURVEY_FEET,

        }

        /// <summary>
        /// <para>Angular Units</para>
        /// <para><xdoc>
        ///   <para>Specifies the angular unit of measure for start and end angles.</para>
        ///   <bulletList>
        ///     <bullet_item>Degrees—The angle will be degrees. This is the default.</bullet_item><para/>
        ///     <bullet_item>Mils—The angle will be mils.</bullet_item><para/>
        ///     <bullet_item>Radians—The angle will be radians.</bullet_item><para/>
        ///     <bullet_item>Gradians—The angle will be gradians.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定起始角和结束角的角度测量单位。</para>
        ///   <bulletList>
        ///     <bullet_item>度 - 角度将为度。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>密耳—角度为密耳。</bullet_item><para/>
        ///     <bullet_item>弧度—角度为弧度。</bullet_item><para/>
        ///     <bullet_item>坡度线—角度将为坡度线。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Angular Units")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _angle_units_value _angle_units { get; set; } = _angle_units_value._DEGREES;

        public enum _angle_units_value
        {
            /// <summary>
            /// <para>Degrees</para>
            /// <para>Degrees—The angle will be degrees. This is the default.</para>
            /// <para>度 - 角度将为度。这是默认设置。</para>
            /// </summary>
            [Description("Degrees")]
            [GPEnumValue("DEGREES")]
            _DEGREES,

            /// <summary>
            /// <para>Mils</para>
            /// <para>Mils—The angle will be mils.</para>
            /// <para>密耳—角度为密耳。</para>
            /// </summary>
            [Description("Mils")]
            [GPEnumValue("MILS")]
            _MILS,

            /// <summary>
            /// <para>Radians</para>
            /// <para>Radians—The angle will be radians.</para>
            /// <para>弧度—角度为弧度。</para>
            /// </summary>
            [Description("Radians")]
            [GPEnumValue("RADS")]
            _RADS,

            /// <summary>
            /// <para>Gradians</para>
            /// <para>Gradians—The angle will be gradians.</para>
            /// <para>坡度线—角度将为坡度线。</para>
            /// </summary>
            [Description("Gradians")]
            [GPEnumValue("GRADS")]
            _GRADS,

        }

        public GenerateRangeFansFromFeatures SetEnv(object outputCoordinateSystem = null, object scratchWorkspace = null, object workspace = null)
        {
            base.SetEnv(outputCoordinateSystem: outputCoordinateSystem, scratchWorkspace: scratchWorkspace, workspace: workspace);
            return this;
        }

    }

}